package com.ylbh.modules.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ylbh.common.exception.NormalException;
import com.ylbh.common.pojo.member.dto.*;
import com.ylbh.common.pojo.member.dto.select.ExtractMoneyDetailSelectDTO;
import com.ylbh.common.pojo.member.dto.select.MemberSelectDTO;
import com.ylbh.common.pojo.member.dto.select.MerchantIncomeSelectDTO;
import com.ylbh.common.pojo.member.dto.update.MemberUpdateDTO;
import com.ylbh.common.pojo.member.vo.MemberVO;
import com.ylbh.common.utils.PageDTO;
import com.ylbh.common.utils.PageUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 *
 *
 * @author mgh
 * @date 2019-04-15 15:35:45
 */
public interface MemberService extends IService<MemberDTO> {

    PageUtils queryPage(MemberSelectDTO params);

    /**
     * 通过id获取用户
     * @param id
     * @return
     */
    MemberVO getUserById(Long id);

    /**
     * 修改用户信息
     * @param memberDTO
     * @return
     */
    void modifyByUserId(MemberDTO memberDTO);

    /**
     * 修改用户类型
     * @param upgradeDTO
     */
    String modifyUserType(MemberUpgradeDTO upgradeDTO);

    /**
     * 修改用户信息
     * @param memberUpdateDTO
     */
    void modifyById(MemberUpdateDTO memberUpdateDTO);

    /**
     * 提现明细
     * @param params
     * @return
     */
    PageUtils queryBusinessWithRecordList(ExtractMoneyDetailSelectDTO params);

    /**
     * 获取商户收益列表
     * @param params
     * @return
     */
    PageUtils queryMerchantIncomeList(MerchantIncomeSelectDTO params);

    /**
     * 汇总商户总金额
     * @param id
     * @return
     */
    BigDecimal sumMerchantIncomeMoney(Long id);

    /**
     * 汇总商户推广提现未提现余额
     * @param id
     * @return
     */
    HashMap<String, BigDecimal> sumMerchantExtensionMoney(Long id);

    /**
     * 通过用户名获取用户
     * @param name
     * @return
     */
    MemberVO getByUserName(String name);

    /**
     * 运营商列表
     * @param params
     * @return
     */
    PageUtils queryOperatorPage(PageDTO params);

    /**
     * 导出会员详情
     * @param response
     * @param request
     */
    void userExcel(HttpServletResponse response, HttpServletRequest request) throws NormalException;

    /**
     * 新增运营商
     * @param addOperatorDTO
     */
    void addOperator(AddOperatorDTO addOperatorDTO);

    /**
     * 修改购物劵
     * @param userMemberDTO
     */
    void updateUserIntegralById(MemberDTO userMemberDTO);

    /**
     * 会员关系
     */
    PageUtils queryMembership(MembershipDTO dto);

    /**
     * 获取运营商是否添加过
     * @param userName
     * @return
     */
    int getIsExistenceByUserName(String userName);

    /**
     * 会员升级-判断是否需要选择上级
     * @param id
     * @return
     */
    MemberVO needToSelectSuperiorById(Long id);

    /**
     * 获取所有的运营商
     * @return
     */
    List<MemberVO> queryAllOperator();

    /**
     * 查询出所有的合伙人
     * @return
     */
    List<MemberVO> queryAllPartnerList();
}

